home *** CD-ROM | disk | FTP | other *** search
- (*===========================================================================*)
- (* Procedure for log open/close *)
- (* *)
- (* Copyright 1988, 1989, 1990, 1992 by H. Roy Engehausen. All rights *)
- (* reserved. *)
- (* *)
- (*===========================================================================*)
-
- {$UNDEF LOG_DEBUG}
-
- (*===========================================================================*)
- (* Generate log name *)
- (*===========================================================================*)
-
- FUNCTION generate_log_name : PATHSTR;
-
- VAR
- log_ext : EXTSTR;
- log_file : NAMESTR;
- log_path : DIRSTR;
- work : LONGINT;
-
- BEGIN;
-
- FSPLIT(opt_block.log_fn, log_path, log_file, log_ext);
-
- CASE log_type OF
- 'M':
- log_file := COPY(todays_date_time, 1, 4);
- 'D':
- log_file := COPY(todays_date_time, 1, 6);
- 'W':
- BEGIN;
- work := current_day_time - todays_dow * LONGINT(ticks_per_day);
- log_file := COPY(time_str(work, TRUE), 1, 6);
- END;
- END;
-
- generate_log_name := log_path + 'BB' + log_file + '.LOG';
-
- END;
-
- (*===========================================================================*)
- (* Initialize log *)
- (*===========================================================================*)
-
- PROCEDURE log_init;
-
- VAR
- i : BYTE;
- fn : PATHSTR;
- log_ext : EXTSTR;
- log_fname : NAMESTR;
- log_path : DIRSTR;
-
- BEGIN;
-
- IF opt_block.log_fn = 'NONE' THEN
- BEGIN;
- log_time := max_time;
- log_type := 'N';
- EXIT;
- END;
-
- log_time := up_time_from_now(log_interval * 60);
-
- log_dow := todays_dow;
-
- FSPLIT(opt_block.log_fn, log_path, log_fname, log_ext);
-
- IF (log_ext <> '')
- OR ((log_fname <> 'WEEKLY')
- AND (log_fname <> 'MONTHLY')
- AND (log_fname <> 'DAILY')) THEN
- BEGIN;
- log_type := ' ';
- fn := opt_block.log_fn;
- END
- ELSE
- BEGIN;
- log_type := log_fname[1];
- fn := generate_log_name;
- END;
-
- ASSIGN(log_file, fn);
- {$I-}
- APPEND(log_file);
- {$I+}
- i := IORESULT;
- IF i <> 0 THEN
- BEGIN;
- {$I-}
- REWRITE(log_file);
- {$I+}
- i := IORESULT;
- END;
-
- IF i <> 0 THEN
- BEGIN;
- WRITELN('Error ', i, ' opening log file -- ', fn);
- HALT;
- END;
-
- WRITELN(log_file, todays_date_time, ' BEGIN');
-
-
- END;
-
- (*===========================================================================*)
- (* Close log *)
- (*===========================================================================*)
-
- PROCEDURE log_close;
-
- BEGIN;
-
- WRITELN(log_file, todays_date_time, ' END');
- CLOSE(log_file);
-
- END;
-
- (*===========================================================================*)
- (* Sync log *)
- (*===========================================================================*)
-
- PROCEDURE log_sync;
-
- VAR
- fn : PATHSTR;
- i : INTEGER;
- new_file : BOOLEAN;
-
- BEGIN;
-
- {$IFDEF LOG_DEBUG}
- WRITELN('Log Sync');
- WRITELN('LOGDOW = ', log_dow);
- WRITELN('TODDOW = ', todays_dow);
- {$ENDIF}
-
- (*-----------------------------------------------------------------------*)
- (* Obtain the interrupt lock *)
- (*-----------------------------------------------------------------------*)
-
- get_semaphore(semaphore_interrupts, sem_exclusive, FALSE);
-
- (*-----------------------------------------------------------------------*)
- (* Close the log to force an update *)
- (*-----------------------------------------------------------------------*)
-
- CLOSE(log_file);
-
- (*-----------------------------------------------------------------------*)
- (* Change name if needed *)
- (*-----------------------------------------------------------------------*)
-
- new_file := (log_dow <> todays_dow) AND (log_type <> ' ');
-
- (*-----------------------------------------------------------------------*)
- (* Change name if needed *)
- (*-----------------------------------------------------------------------*)
-
- fn := '';
-
- IF (log_dow <> todays_dow) AND (log_type <> ' ') THEN
- BEGIN;
-
- fn := generate_log_name;
-
- ASSIGN(log_file, fn);
-
- log_dow := todays_dow;
-
- {$IFDEF LOG_DEBUG}
- WRITELN('New log name -- ', generate_log_name);
- WRITELN('LOGDOW = ', log_dow);
- WRITELN('TODDOW = ', todays_dow);
- {$ENDIF}
-
- END;
-
- (*-----------------------------------------------------------------------*)
- (* Reopen the log *)
- (*-----------------------------------------------------------------------*)
-
- {$I-}
- APPEND(log_file);
- {$I+}
- i := IORESULT;
- IF new_file AND (i <> 0) THEN
- BEGIN;
- {$I-}
- REWRITE(log_file);
- {$I+}
- i := IORESULT;
- END;
-
- IF i <> 0 THEN
- BEGIN;
- WRITELN('Error ', i, ' syncing log file -- ', fn);
- HALT;
- END;
-
- (*-----------------------------------------------------------------------*)
- (* Release the interrupt lock *)
- (*-----------------------------------------------------------------------*)
-
- free_semaphore(semaphore_interrupts);
-
- log_time := up_time_from_now(log_interval * 60);
-
- END;